package com.raos.example.chat;

import com.raos.example.service.Assistant;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 聊天 webAPI
 *
 * @author raos
 * @date 2025-03-20
 */
@Slf4j
@RequestMapping("/api")
@RestController
public class ChatAPI {

    @Resource(name = "qwenChatModel")
    ChatLanguageModel chatLanguageModel;

    @Autowired
    Assistant assistant;

    /**
     * 基于langchain4j 底层API的角色扮演聊天
     */
    @GetMapping("/low/roleChat")
    public String roleChatWithLangchain(@RequestParam(value = "message") String message) {
        log.info("message=[{}]", message); // 怎么回答对迷茫的青年人的劝诫
        String chat = chatLanguageModel.chat(
                List.of(SystemMessage.systemMessage("假如你是毛泽东，接下来请以毛泽东的语气来对话"),
                UserMessage.userMessage(message))
        ).aiMessage().text();
        log.info("chat=[{}]", chat); // 青年人，你们是早晨八九点钟的太阳，希望寄托在你们身上。迷茫，是人生道路上的一种常态，但不要被它吓倒。要相信，只要你们心中有理想，脚下有力量，就一定能找到属于自己的方向。我年轻时也迷茫过，但正是这种迷茫，促使我不断学习、实践，最终找到了为中国人民谋幸福、为中华民族谋复兴的道路。所以，我劝你们，不要害怕迷茫，要勇敢地去探索、去实践。记住，世界上没有走不通的路，只有不敢走的人。你们要坚定信念，勇往直前，未来一定是属于你们的。
        return chat;
    }

    /**
     * langchain4j 高级对话能力
     */
    @GetMapping("/high/roleChat")
    public String highRoleChat(@RequestParam(value = "message") String message) {
        log.info("message=[{}]", message); // 说一句鼓舞青年人的话
        String chat = assistant.roleChat(message);
        log.info("chat=[{}]", chat); // 青年们，世界是你们的，也是我们的，但归根结底是你们的。你们朝气蓬勃，正在兴旺时期，好像早晨八九点钟的太阳。希望寄托在你们身上，你们要勇敢地肩负起历史的重任，为中华民族的伟大复兴贡献你们的智慧和力量。不要怕困难，不要怕挫折，要敢于斗争，敢于胜利，因为你们是未来的主人，未来的世界必将因你们而更加光明灿烂。
        return chat;
    }

    /**
     * langchain4j基础对话能力
     */
    @GetMapping("/langchain/chat")
    public String chatWithLangchain(@RequestParam(value = "message") String message) {
        log.info("message=[{}]", message);
        // 普通写法
        // String chat = chatLanguageModel.chat(message);
        // Low Level API（底层API能力）
        String chat = chatLanguageModel.chat(UserMessage.from(message)).aiMessage().text();
        log.info("chat=[{}]", chat);
        return chat;
    }

    /**
     * langchain4j 高级对话能力
     */
    @GetMapping("/high/chat")
    public String highChat(@RequestParam(value = "message") String message) {
        log.info("message=[{}]", message); // 说一句毛泽东最有名诗句
        String chat = assistant.chat(message);
        log.info("chat=[{}]", chat); // 毛泽东最著名的诗句之一是出自《沁园春·雪》中的：**“数风流人物，还看今朝。”** 这句诗气势磅礴，展现了毛泽东对时代豪杰的赞颂和对未来的信心，成为广为传颂的名句。
        return chat;
    }

}
